iT邦幫忙

2022 iThome 鐵人賽

DAY 21
3
AI & Data

OH~ AI 原來如此,互助就此開始!系列 第 21

Day 20. 深度學習模型 - Attention 和 Transformer

  • 分享至 

  • xImage
  •  

注意 ! 注意力就是你所需要的!是不是目光馬上被「注意」兩個字吸引過來?這就是我們要的,讓模型注意每個當下的精采片段!今天的 Attention 和 Transformer 可以說是目前大放異彩的 GPT-3 的基石,雖然今天內容比較偏向理論,但精采度與重要性不變,明天會接著介紹實際的應用。

注意(Attention)

如同字面上解釋,幫助模型找出值得注意的地方,讓輸出的結果更精確。最早是活用在 Seq2Seq 的改善,之後也延伸到圖像領域。

前一篇講的 Seq2Seq 有個最大的問題是,編碼器最後的隱藏狀態是以固定長度的向量傳遞給解碼器,因此句子越長越難傳達必要的訊息。


ーー句子越長,各單詞的訊息占比就越小。出處:Illustrated Guide to Recurrent Neural Networks

而 Attention 可以透過時間的權重來注意每個單詞當下應注意的部分。
Seq2Seq 的 Attention 架構如下:

https://ithelp.ithome.com.tw/upload/images/20221005/20150622yQ0kyJu52f.jpg
ーー原圖出處:CS 224n: Assignment #4

簡單來說就是解碼器當下的輸出預測,會根據權重知道要特別注意編碼器的哪個輸入部分。以上圖為例,第二個單字的「Organisms」會因為權重,知道要注意輸入的第三個字來預測下一個字。至於 Attention 實際上怎麼運作的,步驟如下:

  1. 計算注意分數
    選擇一個注意函數(attention function),函數有好幾種,比如說使用內積(dot product),透過函數計算解碼器當下狀態和編碼器所有狀態的相關性。
  2. 計算注意分布
    用 softmax 將分數轉換成機率分布。可以看到第三個字的權重比較高。
  3. 計算 context vector
    編碼器所有狀態與剛剛的機率分布做加權平均。

最後使用 context vector 和 解碼器當下的狀態一起作預測。
讓當下的時間步驟可以注意到和自己最相關的輸入部分。

可以更直觀地透過 Attention 的權重來看機器翻譯的視覺化,下圖是英文翻法文,每個單詞相關性的權重,越黑越接近0表示相關性越低,反之,越白越接近1則相關性較高。

https://ithelp.ithome.com.tw/upload/images/20220926/20150622l1QqDrZTho.jpg
ーー出處:Neural Machine Translation by Jointly Learning to Align and Translate

用在圖像的 Attention

Day 5 介紹過的歷屆 ILSVRC 冠軍中,2017年的 SENet 就是採用了 ResNet + SE Block(Attention,下圖右邊多出來的部分) 的架構。

https://ithelp.ithome.com.tw/upload/images/20220926/201506226chhVYraeB.jpg
ーー出處:SENet 論文

透過了對通道(Channel)的注意,篩選出有力的特徵。
https://ithelp.ithome.com.tw/upload/images/20220926/20150622vxlmRqEpl1.jpg
ーー出處:SENet 論文

凸顯出圖片應注意的部分。
https://ithelp.ithome.com.tw/upload/images/20221005/20150622g4iUTu0J5i.jpg
ーー原圖出處:Channel Attention and Squeeze-and-Excitation Networks (SENet)

Transformer

2017 年發表的一篇論文「注意力就是你所需要的」(Attention Is All You Need),捨棄 RNN 架構,採用兩種 Attention 架構解決了 RNN 的兩個問題:

  • 較久遠的資料無法有效學習
    最前面的資料隨著時間經過,影響力越來越薄弱。
    對策:透過自注意(Self-Attention)做單詞間的關聯計算,再透過編碼器-解碼器注意(Encoder-Decoder Attention) 將輸入和輸出連結起來。
  • 速度太慢
    RNN 的輸入只能照時間軸順序一個個處理,不同的時間步驟無法同時計算。
    對策:捨棄 RNN,透過自注意做並行處理,可以同時計算不同的時間步驟資料。

不同的時間步驟 以 NLP 來看就是不同的單詞。

Transformer 架構
https://ithelp.ithome.com.tw/upload/images/20221005/20150622wlMwhAqL1k.jpg
ーー原圖出處:Transformer 論文

看起來有點複雜,我們先簡化構造再逐項說明,如圖所示,左邊編碼器,右邊解碼器。

https://ithelp.ithome.com.tw/upload/images/20221005/20150622lvEJTAQQDw.jpg
ーー原圖出處:illustrated-transformer

編碼器

  1. Multi-Header Attention 做 自注意
    計算 輸入它自己每個單詞之間的關聯度。無關順序可以同時處理加快速度。
  2. Feed Forward
    兩層的前饋神經網路,激勵函數用 ReLU 做學習。

解碼器

  1. Masked Multi-Header Attention 做 自注意
    計算 輸出它自己每個單詞之間的關聯度。無關順序可以同時處理加快速度。
    由於解碼器是照順序預測,所以預測時不需計算該單詞和它之後的單詞(未來資料)之間的關聯度。因此多了遮罩(Mask)來蓋掉該位置之後的情報。

  2. Multi-Header Attention 做 編碼器-解碼器注意
    計算 輸出 和 輸入 之間單詞的關聯度。
    類似 Seq2Seq 的 Attention,注意輸出和輸入的哪個部分有關聯。

  3. Feed Forward
    兩層的前饋神經網路,激勵函數用 ReLU 做學習。

上述編碼器和解碼器的步驟會 × N次。

其他的處理

  • Positional Encoding
    編碼器和解碼器的自注意,由於只計算自己單詞之間的關係,沒有照順序處理,會失去單詞所在位置的情報,所以一開始會透過 位置編碼(Positional Encoding) 把位置的順序情報也編碼進去。

  • Add & Norm
    每一步之後會做 Add & Norm, Add 是之前介紹過的 Residual(跳接兩個子層)。Norm 是 正規化(Normalization)

Multi-Header Attention 的計算方式

了解了大步驟之後,接下來再更細部地解釋各個注意是怎麼計算的。
https://ithelp.ithome.com.tw/upload/images/20220927/20150622OMcuB9Q8Zl.jpg
ーー出處:Transformer 論文

主要是透過 Scaled Dot-Product(內積)Attention 計算,和一般的 attention 差不多。只是細分成 Query,Key,Value(Q,K,V)。

Q = 某個時間步驟(單詞)
K = Q 作 attention 的對象,用來和 Q 做計算。
V = Q 作 attention 的對象,K 的原始值。

  • 以編碼器的步驟 1. 而言,因為是自注意,Q,K,V都來自輸入自己。
    1. 計算注意分數
      計算輸入某個單詞 (Q) 對 輸入其他所有單詞(K)的關聯性
    2. 計算注意分布
      將分數轉換成機率分布。
    3. 計算 context vector
      剛剛的機率分布 和 輸入其他所有的單詞(V)做加權平均。
  • 解碼器的步驟 2. 是計算輸出和輸入的關聯,Q 來自輸出,K 和 V 是輸入所有的單詞。
    1. 計算注意分數
      計算輸出某個單詞 (Q) 對 輸入所有單詞(K)的關聯性
    2. 計算注意分布
      將分數轉換成機率分布。
    3. 計算 context vector
      剛剛的機率分布和輸入所有單詞(V)做加權平均。

自注意的用處

例如我們有個輸入:

The animal didn't cross the street because it was too tired.
(那個動物無法過馬路因為牠太累了)

可以透過自注意去確認 (it) 是指這句的哪個部分,比如說動物(animal)。
https://ithelp.ithome.com.tw/upload/images/20220927/20150622vqULaUJzCH.jpg

多頭(Multi-Header)則透過隨機初始的 Linear 層的訓練,多去注意其他不同的東西。可以看出 (it) 不只注意到動物,還連結到(tire)這個字。
https://ithelp.ithome.com.tw/upload/images/20220927/20150622ioKCSBBNS9.jpg
ーー上述圖片均出自:illustrated-transformer

Transformer 的架構介紹就到這邊,之後又衍生出只用編碼器或只用解碼器的各種變形。

最後要注意的是,解碼器是照順序輸出預測,所以解碼器作預測時無法做同時處理。

補充資料

立即複習

  1. Seq2Seq 的問題在於隱藏層狀態是固定還是可變的長度?
  2. SENet用 Attention 注意圖像的哪個部分?
  3. Transformer 之所以能夠捨棄 RNN,是因為透過 Attention 解決 RNN 的哪兩個問題?
  4. 編碼器和解碼器的第一個步驟都是做自注意,差別在於解碼器有什麼?
  5. 編碼器和解碼器的架構差在解碼器多了編碼器-解碼器注意,這個部分是用來做什麼?
  6. 編碼器的時間步驟可以同時處理,解碼器作預測時可以嗎?

參考資料


上一篇
Day 19. 深度學習模型 - RNN(二)
下一篇
Day 21. 深度學習模型 - NLP 預訓練模型
系列文
OH~ AI 原來如此,互助就此開始!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言